<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>
Multimaps (Guava: Google Core Libraries for Java - r08)
</TITLE>


<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Multimaps (Guava: Google Core Libraries for Java - r08)";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
com.google.common.collect</FONT>
<BR>
Class Multimaps</H2>
<PRE>
<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Multimaps</B>
</PRE>
<HR>
<DL>
<DT><PRE><FONT SIZE="-1"><A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">@GwtCompatible</A>(<A HREF="../../../../com/google/common/annotations/GwtCompatible.html#emulated()">emulated</A>=true)
</FONT>public final class <B>Multimaps</B><DT>extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
</PRE>

<P>
Provides static methods acting on or generating a <code>Multimap</code>.
<P>

<P>
<DL>
<DT><B>Since:</B></DT>
  <DD>2 (imported from Google Collections Library)</DD>
<DT><B>Author:</B></DT>
  <DD>Jared Levy, Robert Konigsberg, Mike Bostock, Louis Wasserman</DD>
</DL>
<HR>

<P>

<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a multimap view of the specified map.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
      <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
 applying a specified function to each item in an <code>Iterable</code> of
 values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; 
<BR>
M</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
           M&nbsp;dest)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
 its key and value reversed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
            <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
               <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                     <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
 factory.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
 specified multimap.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
 multimap.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
 specified multimap.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
 the specified multimap.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V2&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#transformEntries(com.google.common.collect.ListMultimap, com.google.common.collect.Maps.EntryTransformer)">transformEntries</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V1&gt;&nbsp;fromMap,
                 <A HREF="../../../../com/google/common/collect/Maps.EntryTransformer.html" title="interface in com.google.common.collect">Maps.EntryTransformer</A>&lt;? super K,? super V1,V2&gt;&nbsp;transformer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a <code>ListMultimap</code> whose values are derived from the 
 original multimap's entries.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V2&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#transformEntries(com.google.common.collect.Multimap, com.google.common.collect.Maps.EntryTransformer)">transformEntries</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V1&gt;&nbsp;fromMap,
                 <A HREF="../../../../com/google/common/collect/Maps.EntryTransformer.html" title="interface in com.google.common.collect">Maps.EntryTransformer</A>&lt;? super K,? super V1,V2&gt;&nbsp;transformer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a multimap whose values are derived from the original 
 multimap's entries.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V2&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#transformValues(com.google.common.collect.ListMultimap, com.google.common.base.Function)">transformValues</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V1&gt;&nbsp;fromMultimap,
                <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a <code>ListMultimap</code> where each value is transformed by
 a function.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V2&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#transformValues(com.google.common.collect.Multimap, com.google.common.base.Function)">transformValues</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V1&gt;&nbsp;fromMultimap,
                <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a multimap where each value is transformed by a function.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
<TR ALIGN="right" VALIGN="">
<TD NOWRAP><FONT SIZE="-1">
<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
</TR>
</TABLE>
</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="newMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
newMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>newMultimap</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                                              <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
<DL>
<DD>Creates a new <code>Multimap</code> that uses the provided map and factory. It
 can generate a multimap based on arbitrary <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
 <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> classes.

 <p>The <code>factory</code>-generated and <code>map</code> classes determine the
 multimap iteration order. They also specify the behavior of the
 <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
 multimap and its returned views. However, the multimap's <code>get</code>
 method returns instances of a different class than <code>factory.get()</code>
 does.

 <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
 collections generated by <code>factory</code>, and the multimap contents are all
 serializable.

 <p>The multimap is not threadsafe when any concurrent operations update the
 multimap, even if <code>map</code> and the instances generated by
 <code>factory</code> are. Concurrent read operations will work correctly. To
 allow concurrent update operations, wrap the multimap with a call to
 <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.

 <p>Call this method only when the simpler methods
 <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>,
 <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>,
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.

 <p>Note: the multimap assumes complete ownership over of <code>map</code> and
 the collections returned by <code>factory</code>. Those objects should not be
 manually updated and they should not use soft, weak, or phantom references.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
     values<DD><CODE>factory</CODE> - supplier of new, empty collections that will each hold all
     values for a given key
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
</DD>
</DL>
<HR>

<A NAME="newListMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
newListMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>newListMultimap</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                                                      <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
<DL>
<DD>Creates a new <code>ListMultimap</code> that uses the provided map and factory.
 It can generate a multimap based on arbitrary <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>
 classes.

 <p>The <code>factory</code>-generated and <code>map</code> classes determine the
 multimap iteration order. They also specify the behavior of the
 <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
 multimap and its returned views. The multimap's <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> methods return <code>RandomAccess</code>
 lists if the factory does. However, the multimap's <code>get</code> method
 returns instances of a different class than does <code>factory.get()</code>.

 <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
 lists generated by <code>factory</code>, and the multimap contents are all
 serializable.

 <p>The multimap is not threadsafe when any concurrent operations update the
 multimap, even if <code>map</code> and the instances generated by
 <code>factory</code> are. Concurrent read operations will work correctly. To
 allow concurrent update operations, wrap the multimap with a call to
 <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.

 <p>Call this method only when the simpler methods
 <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A> and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>
 won't suffice.

 <p>Note: the multimap assumes complete ownership over of <code>map</code> and
 the lists returned by <code>factory</code>. Those objects should not be manually
 updated and they should not use soft, weak, or phantom references.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
     values<DD><CODE>factory</CODE> - supplier of new, empty lists that will each hold all values
     for a given key
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
</DD>
</DL>
<HR>

<A NAME="newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
newSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>newSetMultimap</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                                                    <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
<DL>
<DD>Creates a new <code>SetMultimap</code> that uses the provided map and factory.
 It can generate a multimap based on arbitrary <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
 classes.

 <p>The <code>factory</code>-generated and <code>map</code> classes determine the
 multimap iteration order. They also specify the behavior of the
 <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
 multimap and its returned views. However, the multimap's <code>get</code>
 method returns instances of a different class than <code>factory.get()</code>
 does.

 <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
 sets generated by <code>factory</code>, and the multimap contents are all
 serializable.

 <p>The multimap is not threadsafe when any concurrent operations update the
 multimap, even if <code>map</code> and the instances generated by
 <code>factory</code> are. Concurrent read operations will work correctly. To
 allow concurrent update operations, wrap the multimap with a call to
 <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.

 <p>Call this method only when the simpler methods
 <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>,
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.

 <p>Note: the multimap assumes complete ownership over of <code>map</code> and
 the sets returned by <code>factory</code>. Those objects should not be manually
 updated and they should not use soft, weak, or phantom references.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
     values<DD><CODE>factory</CODE> - supplier of new, empty sets that will each hold all values
     for a given key
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
</DD>
</DL>
<HR>

<A NAME="newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
newSortedSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>newSortedSetMultimap</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
                                                                <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
<DL>
<DD>Creates a new <code>SortedSetMultimap</code> that uses the provided map and
 factory. It can generate a multimap based on arbitrary <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
 <A HREF="http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> classes.

 <p>The <code>factory</code>-generated and <code>map</code> classes determine the
 multimap iteration order. They also specify the behavior of the
 <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
 multimap and its returned views. However, the multimap's <code>get</code>
 method returns instances of a different class than <code>factory.get()</code>
 does.

 <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
 sets generated by <code>factory</code>, and the multimap contents are all
 serializable.

 <p>The multimap is not threadsafe when any concurrent operations update the
 multimap, even if <code>map</code> and the instances generated by
 <code>factory</code> are. Concurrent read operations will work correctly. To
 allow concurrent update operations, wrap the multimap with a call to
 <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><CODE>synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap<K, V>)</CODE></A>.

 <p>Call this method only when the simpler methods
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A> and
 <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.

 <p>Note: the multimap assumes complete ownership over of <code>map</code> and
 the sets returned by <code>factory</code>. Those objects should not be manually
 updated and they should not use soft, weak, or phantom references.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
     values<DD><CODE>factory</CODE> - supplier of new, empty sorted sets that will each hold
     all values for a given key
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
</DD>
</DL>
<HR>

<A NAME="invertFrom(com.google.common.collect.Multimap,com.google.common.collect.Multimap)"><!-- --></A><A NAME="invertFrom(com.google.common.collect.Multimap, M)"><!-- --></A><H3>
invertFrom</H3>
<PRE>
public static &lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; M <B>invertFrom</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
                                                         M&nbsp;dest)</PRE>
<DL>
<DD>Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
 its key and value reversed.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>source</CODE> - any multimap<DD><CODE>dest</CODE> - the multimap to copy into; usually empty
<DT><B>Returns:</B><DD><code>dest</code></DL>
</DD>
</DL>
<HR>

<A NAME="synchronizedMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
synchronizedMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>synchronizedMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
<DL>
<DD>Returns a synchronized (thread-safe) multimap backed by the specified
 multimap. In order to guarantee serial access, it is critical that
 <b>all</b> access to the backing multimap is accomplished through the
 returned multimap.

 <p>It is imperative that the user manually synchronize on the returned
 multimap when accessing any of its collection views: <pre>   <code>Multimap&lt;K, V&gt; m = Multimaps.synchronizedMultimap(
       HashMultimap.&lt;K, V&gt;create());
   ...
   Set&lt;K&gt; s = m.keySet();  // Needn't be in synchronized block
   ...
   synchronized (m) {  // Synchronizing on m, not s!
     Iterator&lt;K&gt; i = s.iterator(); // Must be in synchronized block
     while (i.hasNext()) {
       foo(i.next());
     }
   }</code></pre>

 Failure to follow this advice may result in non-deterministic behavior.

 <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
 <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that aren't
 synchronized.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped in a synchronized view
<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="unmodifiableMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
unmodifiableMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>unmodifiableMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
<DL>
<DD>Returns an unmodifiable view of the specified multimap. Query operations on
 the returned multimap "read through" to the specified multimap, and
 attempts to modify the returned multimap, either directly or through the
 multimap's views, result in an <code>UnsupportedOperationException</code>.

 <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
 <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
 modifiable.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
     returned
<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
synchronizedSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>synchronizedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
<DL>
<DD>Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
 specified multimap.

 <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
unmodifiableSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>unmodifiableSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
<DL>
<DD>Returns an unmodifiable view of the specified <code>SetMultimap</code>. Query
 operations on the returned multimap "read through" to the specified
 multimap, and attempts to modify the returned multimap, either directly or
 through the multimap's views, result in an
 <code>UnsupportedOperationException</code>.

 <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
 <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
 modifiable.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
     returned
<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
synchronizedSortedSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>synchronizedSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
<DL>
<DD>Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
 the specified multimap.

 <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
unmodifiableSortedSetMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>unmodifiableSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
<DL>
<DD>Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.
 Query operations on the returned multimap "read through" to the specified
 multimap, and attempts to modify the returned multimap, either directly or
 through the multimap's views, result in an
 <code>UnsupportedOperationException</code>.

 <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
 <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
 modifiable.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
     returned
<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="synchronizedListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
synchronizedListMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>synchronizedListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
<DL>
<DD>Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
 specified multimap.

 <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
unmodifiableListMultimap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>unmodifiableListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
<DL>
<DD>Returns an unmodifiable view of the specified <code>ListMultimap</code>. Query
 operations on the returned multimap "read through" to the specified
 multimap, and attempts to modify the returned multimap, either directly or
 through the multimap's views, result in an
 <code>UnsupportedOperationException</code>.

 <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
 <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
 modifiable.

 <p>The returned multimap will be serializable if the specified multimap is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
     returned
<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
</DD>
</DL>
<HR>

<A NAME="forMap(java.util.Map)"><!-- --></A><H3>
forMap</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
<DL>
<DD>Returns a multimap view of the specified map. The multimap is backed by the
 map, so changes to the map are reflected in the multimap, and vice versa.
 If the map is modified while an iteration over one of the multimap's
 collection views is in progress (except through the iterator's own <code>remove</code> operation, or through the <code>setValue</code> operation on a map entry
 returned by the iterator), the results of the iteration are undefined.

 <p>The multimap supports mapping removal, which removes the corresponding
 mapping from the map. It does not support any operations which might add
 mappings, such as <code>put</code>, <code>putAll</code> or <code>replaceValues</code>.

 <p>The returned multimap will be serializable if the specified map is
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>map</CODE> - the backing map for the returned multimap view</DL>
</DD>
</DL>
<HR>

<A NAME="transformValues(com.google.common.collect.Multimap, com.google.common.base.Function)"><!-- --></A><H3>
transformValues</H3>
<PRE>
<FONT SIZE="-1"><A HREF="../../../../com/google/common/annotations/Beta.html" title="annotation in com.google.common.annotations">@Beta</A>
<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">@GwtIncompatible</A>(<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A>="untested")
</FONT>public static &lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V2&gt; <B>transformValues</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V1&gt;&nbsp;fromMultimap,
                                                                                 <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</PRE>
<DL>
<DD>Returns a view of a multimap where each value is transformed by a function.
 All other properties of the multimap, such as iteration order, are left 
 intact. For example, the code: <pre>   <code>Multimap&lt;String, Integer&gt; multimap =
     ImmutableSetMultimap.of("a", 2, "b", -3, "b", -3, "a", 4, "c", 6);
 Function&lt;Integer, String&gt; square = new Function&lt;Integer, String&gt;() {
     public String apply(Integer in) {
       return Integer.toString(in * in);
     }
 };
 Multimap&lt;String, String&gt; transformed =
     Multimaps.transformValues(multimap, square);
   System.out.println(transformed);</code></pre>

 ... prints <code>{a=[4, 16], b=[9, 9], c=[6]}</code>.

 <p>Changes in the underlying multimap are reflected in this view. 
 Conversely, this view supports removal operations, and these are reflected 
 in the underlying multimap.

 <p>It's acceptable for the underlying multimap to contain null keys, and 
 even null values provided that the function is capable of accepting null 
 input.  The transformed multimap might contain null values, if the function
 sometimes gives a null result.

 <p>The returned multimap is not thread-safe or serializable, even if the
 underlying multimap is.  The <code>equals</code> and <code>hashCode</code> methods
 of the returned multimap are meaningless, since there is not a definition 
 of <code>equals</code> or <code>hashCode</code> for general collections, and 
 <code>get()</code> will return a general <code>Collection</code> as opposed to a 
 <code>List</code> or a <code>Set</code>.

 <p>The function is applied lazily, invoked when needed. This is necessary
 for the returned multimap to be a view, but it means that the function will
 be applied many times for bulk operations like 
 <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><CODE>Multimap.containsValue(java.lang.Object)</CODE></A> and <code>Multimap.toString()</code>. For this to
 perform well, <code>function</code> should be fast. To avoid lazy evaluation 
 when the returned multimap doesn't need to be a view, copy the returned 
 multimap into a new multimap of your choosing.
<P>
<DD><DL>
<DT><B>Since:</B></DT>
  <DD>7</DD>
</DL>
</DD>
</DL>
<HR>

<A NAME="transformEntries(com.google.common.collect.Multimap, com.google.common.collect.Maps.EntryTransformer)"><!-- --></A><H3>
transformEntries</H3>
<PRE>
<FONT SIZE="-1"><A HREF="../../../../com/google/common/annotations/Beta.html" title="annotation in com.google.common.annotations">@Beta</A>
<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">@GwtIncompatible</A>(<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A>="untested")
</FONT>public static &lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V2&gt; <B>transformEntries</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V1&gt;&nbsp;fromMap,
                                                                                  <A HREF="../../../../com/google/common/collect/Maps.EntryTransformer.html" title="interface in com.google.common.collect">Maps.EntryTransformer</A>&lt;? super K,? super V1,V2&gt;&nbsp;transformer)</PRE>
<DL>
<DD>Returns a view of a multimap whose values are derived from the original 
 multimap's entries. In contrast to <A HREF="../../../../com/google/common/collect/Multimaps.html#transformValues(com.google.common.collect.Multimap, com.google.common.base.Function)"><CODE>transformValues(com.google.common.collect.Multimap<K, V1>, com.google.common.base.Function<? super V1, V2>)</CODE></A>, this method's
 entry-transformation logic may depend on the key as well as the value.

 <p>All other properties of the transformed multimap, such as iteration 
 order, are left intact. For example, the code: <pre>   <code>SetMultimap&lt;String, Integer&gt; multimap =
       ImmutableSetMultimap.of("a", 1, "a", 4, "b", -6);
   EntryTransformer&lt;String, Integer, String&gt; transformer =
       new EntryTransformer&lt;String, Integer, String&gt;() {
         public String transformEntry(String key, Integer value) {
            return (value &gt;= 0) ? key : "no" + key;
         }
       };
   Multimap&lt;String, String&gt; transformed =
       Multimaps.transformEntries(multimap, transformer);
   System.out.println(transformed);</code></pre>

 ... prints <code>{a=[a, a], b=[nob]}</code>.

 <p>Changes in the underlying multimap are reflected in this view. 
 Conversely, this view supports removal operations, and these are reflected 
 in the underlying multimap.

 <p>It's acceptable for the underlying multimap to contain null keys and 
 null values provided that the transformer is capable of accepting null 
 inputs. The transformed multimap might contain null values if the 
 transformer sometimes gives a null result.

 <p>The returned multimap is not thread-safe or serializable, even if the
 underlying multimap is.  The <code>equals</code> and <code>hashCode</code> methods
 of the returned multimap are meaningless, since there is not a definition 
 of <code>equals</code> or <code>hashCode</code> for general collections, and 
 <code>get()</code> will return a general <code>Collection</code> as opposed to a 
 <code>List</code> or a <code>Set</code>.

 <p>The transformer is applied lazily, invoked when needed. This is
 necessary for the returned multimap to be a view, but it means that the
 transformer will be applied many times for bulk operations like <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><CODE>Multimap.containsValue(java.lang.Object)</CODE></A> and <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>. For this to perform 
 well, <code>transformer</code> should be fast. To avoid lazy evaluation when the
 returned multimap doesn't need to be a view, copy the returned multimap 
 into a new multimap of your choosing.

 <p><b>Warning:</b> This method assumes that for any instance <code>k</code> of
 <code>EntryTransformer</code> key type <code>K</code>, <code>k.equals(k2)</code> implies
 that <code>k2</code> is also of type <code>K</code>. Using an <code>EntryTransformer</code> key type for which this may not hold, such as <code>ArrayList</code>, may risk a <code>ClassCastException</code> when calling methods on
 the transformed multimap.
<P>
<DD><DL>
<DT><B>Since:</B></DT>
  <DD>7</DD>
</DL>
</DD>
</DL>
<HR>

<A NAME="transformValues(com.google.common.collect.ListMultimap, com.google.common.base.Function)"><!-- --></A><H3>
transformValues</H3>
<PRE>
<FONT SIZE="-1"><A HREF="../../../../com/google/common/annotations/Beta.html" title="annotation in com.google.common.annotations">@Beta</A>
<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">@GwtIncompatible</A>(<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A>="untested")
</FONT>public static &lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V2&gt; <B>transformValues</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V1&gt;&nbsp;fromMultimap,
                                                                                     <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</PRE>
<DL>
<DD>Returns a view of a <code>ListMultimap</code> where each value is transformed by
 a function. All other properties of the multimap, such as iteration order, 
 are left intact. For example, the code: <pre>   <code>ListMultimap&lt;String, Integer&gt; multimap 
        = ImmutableListMultimap.of("a", 4, "a", 16, "b", 9);
   Function&lt;Integer, Double&gt; sqrt =
       new Function&lt;Integer, Double&gt;() {
         public Double apply(Integer in) {
           return Math.sqrt((int) in);
         }
       };
   ListMultimap&lt;String, Double&gt; transformed = Multimaps.transformValues(map,
       sqrt);
   System.out.println(transformed);</code></pre>

 ... prints <code>{a=[2.0, 4.0], b=[3.0]}</code>.

 <p>Changes in the underlying multimap are reflected in this view. 
 Conversely, this view supports removal operations, and these are reflected 
 in the underlying multimap.

 <p>It's acceptable for the underlying multimap to contain null keys, and 
 even null values provided that the function is capable of accepting null 
 input.  The transformed multimap might contain null values, if the function
 sometimes gives a null result.

 <p>The returned multimap is not thread-safe or serializable, even if the
 underlying multimap is.

 <p>The function is applied lazily, invoked when needed. This is necessary
 for the returned multimap to be a view, but it means that the function will
 be applied many times for bulk operations like 
 <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><CODE>Multimap.containsValue(java.lang.Object)</CODE></A> and <code>Multimap.toString()</code>. For this to
 perform well, <code>function</code> should be fast. To avoid lazy evaluation 
 when the returned multimap doesn't need to be a view, copy the returned 
 multimap into a new multimap of your choosing.
<P>
<DD><DL>
<DT><B>Since:</B></DT>
  <DD>7</DD>
</DL>
</DD>
</DL>
<HR>

<A NAME="transformEntries(com.google.common.collect.ListMultimap, com.google.common.collect.Maps.EntryTransformer)"><!-- --></A><H3>
transformEntries</H3>
<PRE>
<FONT SIZE="-1"><A HREF="../../../../com/google/common/annotations/Beta.html" title="annotation in com.google.common.annotations">@Beta</A>
<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">@GwtIncompatible</A>(<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A>="untested")
</FONT>public static &lt;K,V1,V2&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V2&gt; <B>transformEntries</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V1&gt;&nbsp;fromMap,
                                                                                      <A HREF="../../../../com/google/common/collect/Maps.EntryTransformer.html" title="interface in com.google.common.collect">Maps.EntryTransformer</A>&lt;? super K,? super V1,V2&gt;&nbsp;transformer)</PRE>
<DL>
<DD>Returns a view of a <code>ListMultimap</code> whose values are derived from the 
 original multimap's entries. In contrast to 
 <A HREF="../../../../com/google/common/collect/Multimaps.html#transformValues(com.google.common.collect.ListMultimap, com.google.common.base.Function)"><CODE>transformValues(ListMultimap, Function)</CODE></A>, this method's 
 entry-transformation logic may depend on the key as well as the value.

 <p>All other properties of the transformed multimap, such as iteration 
 order, are left intact. For example, the code: <pre>   <code>Multimap&lt;String, Integer&gt; multimap =
       ImmutableMultimap.of("a", 1, "a", 4, "b", 6);
   EntryTransformer&lt;String, Integer, String&gt; transformer =
       new EntryTransformer&lt;String, Integer, String&gt;() {
         public String transformEntry(String key, Integer value) {
           return key + value;
         }
       };
   Multimap&lt;String, String&gt; transformed =
       Multimaps.transformEntries(multimap, transformer);
   System.out.println(transformed);</code></pre>

 ... prints <code>{"a"=["a1", "a4"], "b"=["b6"]}</code>.

 <p>Changes in the underlying multimap are reflected in this view. 
 Conversely, this view supports removal operations, and these are reflected 
 in the underlying multimap.

 <p>It's acceptable for the underlying multimap to contain null keys and 
 null values provided that the transformer is capable of accepting null 
 inputs. The transformed multimap might contain null values if the 
 transformer sometimes gives a null result.

 <p>The returned multimap is not thread-safe or serializable, even if the
 underlying multimap is.

 <p>The transformer is applied lazily, invoked when needed. This is
 necessary for the returned multimap to be a view, but it means that the
 transformer will be applied many times for bulk operations like <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><CODE>Multimap.containsValue(java.lang.Object)</CODE></A> and <A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>. For this to perform 
 well, <code>transformer</code> should be fast. To avoid lazy evaluation when the
 returned multimap doesn't need to be a view, copy the returned multimap 
 into a new multimap of your choosing.

 <p><b>Warning:</b> This method assumes that for any instance <code>k</code> of
 <code>EntryTransformer</code> key type <code>K</code>, <code>k.equals(k2)</code> implies
 that <code>k2</code> is also of type <code>K</code>. Using an <code>EntryTransformer</code> key type for which this may not hold, such as <code>ArrayList</code>, may risk a <code>ClassCastException</code> when calling methods on
 the transformed multimap.
<P>
<DD><DL>
<DT><B>Since:</B></DT>
  <DD>7</DD>
</DL>
</DD>
</DL>
<HR>

<A NAME="index(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
index</H3>
<PRE>
public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>index</B>(<A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
                                                     <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</PRE>
<DL>
<DD>Creates an index <code>ImmutableMultimap</code> that contains the results of
 applying a specified function to each item in an <code>Iterable</code> of
 values. Each value will be stored as a value in the resulting multimap,
 yielding a multimap with the same size as the input iterable. The key used
 to store that value in the multimap will be the result of calling the
 function on that value. The resulting multimap is created as an immutable
 snapshot, it does <em>not</em> reflect subsequent changes on the input
 iterable.

 <p>For example, <pre>   <code>List&lt;String&gt; badGuys =
       Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
   Function&lt;String, Integer&gt; stringLengthFunction = ...;
   Multimap&lt;Integer, String&gt; index =
       Multimaps.index(badGuys, stringLengthFunction);
   System.out.println(index);</code></pre>

 prints <pre>   <code>{4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}</code></pre>

 The returned multimap is serializable if its keys and values are all
 serializable.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>values</CODE> - the values to use when constructing the <code>ImmutableMultimap</code><DD><CODE>keyFunction</CODE> - the function used to produce the key for each value
<DT><B>Returns:</B><DD><code>ImmutableMultimap</code> mapping the result of evaluating the
     function <code>keyFunction</code> on each value in the input collection to
     that value
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://download.oracle.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the following cases is true:
     <ul>
     <li><code>values</code> is null
     <li><code>keyFunction</code> is null
     <li>An element in <code>values</code> is null
     <li><code>keyFunction</code> returns <code>null</code> for any element of <code>values</code>
     </ul></DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
